﻿#region Header

// <file>
//     <copyright see="prj:///doc/copyright.txt"/>
//     <license see="prj:///doc/license.txt"/>
//     <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
//     <version>$Revision: 2659 $</version>
// </file>

#endregion Header

namespace ICSharpCode.TextEditor
{
    using System;


    #region Enumerations

    /// <summary>
    /// This enum describes all implemented request types
    /// </summary>
    public enum TextAreaUpdateType
    {
        WholeTextArea,
        SingleLine,
        SinglePosition,
        PositionToLineEnd,
        PositionToEnd,
        LinesBetween
    }

    #endregion Enumerations

    /// <summary>
    /// This class is used to request an update of the textarea
    /// </summary>
    public class TextAreaUpdate
    {
        #region Fields

        TextLocation position;
        TextAreaUpdateType type;

        #endregion Fields

        #region Constructors

        /// <summary>
        /// Creates a new instance of <see cref="TextAreaUpdate"/>
        /// </summary>
        public TextAreaUpdate(TextAreaUpdateType type)
        {
            this.type = type;
        }

        /// <summary>
        /// Creates a new instance of <see cref="TextAreaUpdate"/>
        /// </summary>
        public TextAreaUpdate(TextAreaUpdateType type, TextLocation position)
        {
            this.type     = type;
            this.position = position;
        }

        /// <summary>
        /// Creates a new instance of <see cref="TextAreaUpdate"/>
        /// </summary>
        public TextAreaUpdate(TextAreaUpdateType type, int startLine, int endLine)
        {
            this.type     = type;
            this.position = new TextLocation(startLine, endLine);
        }

        /// <summary>
        /// Creates a new instance of <see cref="TextAreaUpdate"/>
        /// </summary>
        public TextAreaUpdate(TextAreaUpdateType type, int singleLine)
        {
            this.type     = type;
            this.position = new TextLocation(0, singleLine);
        }

        #endregion Constructors

        #region Properties

        public TextLocation Position
        {
            get {
                return position;
            }
        }

        public TextAreaUpdateType TextAreaUpdateType
        {
            get {
                return type;
            }
        }

        #endregion Properties

        #region Methods

        public override string ToString()
        {
            return String.Format("[TextAreaUpdate: Type={0}, Position={1}]", type, position);
        }

        #endregion Methods
    }
}